const express = require("express");
const expressWs = require("express-ws");
const utils = require('../src/utils');
var router = express.Router();
expressWs(router);  //将 express 实例上绑定 websocket 的一些方法

// 建立 WebSocket 服务
//   ws 相当于建立 WebSocket 的实例
//   req 为建立连接的请求
router.ws('/', function (ws, req) {
  console.log('建立连接')
  ws.send(JSON.stringify({type:'open',data:'链接成功'}))
  utils.initWs(ws)
  let timer =true
  let outTimer = setInterval(() => {
    if(!timer){
      ws.send(JSON.stringify({type:'close',data:'链接超时'}))
      ws.close()
    }
    timer = false
  }, 1000*60)

  // 使用 on 方法监听事件
  //   message 事件表示从另一段（服务端）传入的数据
  ws.on('message', function (msg) {
    let jsonMsg = JSON.parse(msg)
    switch(jsonMsg.type){ 
      case 'ping':
        timer = true
        ws.send(JSON.stringify({type:'ping'}))
        break;
      case "close":
        ws.close()
        break;
    }
  })


  // close 事件表示客户端断开连接时执行的回调函数
  ws.on('close', function (e) {
    console.log('close connection')
    clearInterval(outTimer)
    outTimer = undefined
  })
})


module.exports = router;
